WP2 Wrapper
WP2 Wrapper или Оболочка - это js приложение для управление курсами. Найти исходники можно здесь (доступ по инвайтам). Собранный вариант входит в состав плагина Sber Static Builder. Последнюю актуальную версию документации WP2 Wrapper можно найти внизу этого документа
В WordPress настройки оболочки (стили, меню, загрузка, доп. контент, постобработка, переводы) редактируются в Внешний вид → Плеер курса. Значения синхронизируются с ACF options Static Builder и применяются при сборке пакета; live-превью кастомайзера обновляет layout/меню/переводы без применения CSS/JS-сниппетов постобработки к HTML страниц.
Оболочка выполняет несколько важных для курса функций:
- Отображение страниц курса - каждая страница находится в изолированной среде с помощью iframe тега, но может передавать данные в общий Store при помощи вызова
window.parent.courseController.data...(см. документацию WP2 Wrapper) - Сохранение данных курса между сессиями - данные курса сохраняются даже после закрытия страницы курса. В самом простом варианте это реализовано с помощью сохранения в local storage. В elearning виджетах для упрощенной работы с данными оболочки добавлен класс CourseControllerData.js
- Управление модальными окнами, панелями (jsPanel), медиа контентом (Player.js), сброс прогресса курса и другие моменты, с которыми можно ознакомиться ниже
По умолчанию в WordPress сайте courseController не добавляется на странице, его можно получить только на странице в сборке Static Builder плагина. Так как все страницы курса находятся в iframe элементах, а courseController в главном окне, то для получения courseController'а нужно обратиться к родительскому окну с помощью window.parent
Обновление данных
При каждом обновлении данных в WP2 Wrapper у всех страниц курса тригерится событие message, которое можно отловить с помощью window.addEventListener("message", () => {}). Это событие можно отлавливать вручную либо автоматически получать обновленные данные с помощью store.js
Документация
config.settings
| Поле | Значение | Описание |
|---|---|---|
debounceSaveDataMs | 30000 | Число в миллисекундах, ограничивающее частоту сохранение прогресса. Значение по умолчанию 30000. Отсрочка сбрасывается если сохранение происходит немедленно, например при: завершении курса, достижении страницей 100%, сохранении данных, открытии новой страницы. |
preloaderMinimumDisplayTimeMs | 1000 | Минимальное время показа прелоадера при загрузке курса или загрузке любой из страниц |
useDefaultPreloader | false | При false прелоадер берется из svg файла: ./static/load.svg. При true включается вшитый в курс прелоадер. |
autoPreloadNextPage | true | Автоматическая подгрузка следующей страницы |
autoCompleteCourse | true | Автоматически завершить курс когда все страницы достиг ли 100% |
pageAnimation.type | horizontalSlide | Анимация переключения между страницами. Для выключения анимации использовать "none" |
banBrowsers | true | Отключает запуск курса в IE и Safari |
pageProgressType | percent | Значения: percent / check. Способ отслеживания прогресса страниц |
translations.enable | true | Включить мультиязычность |
translations.showChangeLanguageButtons | true | Отображать кнопку смены языка в тулбаре |
translations.defaultLanguage | ru | Язык, используемый при старте курса |
translations.languages | object | Объект с доступными языками вида {"ru": "Русский"} |
Настройки макета
config.modules.layout
| Поле | Значение | Описание |
|---|---|---|
enableMenu | true/false | Включить отображение бокового меню |
enableMenuResizing | true/false | Включить возможность изменения ширины меню за бок на экранах больше 576 пикселей ширины |
enableToolbar | true/false | Включить отображение верхней панели |
enableProgress | true/false | Включить отображение поло сы прогресса в верхней панели |
enableBottomBar | true/false | Включить отображение нижней панели |
navigation | "free"/"restricted" | Навигация между страницами. Free - обучаемый может перейти на любую страницу. Restricted - следующая страница заблокирована, пока не пройдена предыдущая. |
useSectionsInMenu | true/false | Включить отображение секций в меню |
showLogo | true/false | Показать логотип в меню |
Данные
Сохранение данных
window.parent.courseController.data.set({id, value, immediate});
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да | Ключ по которому сохранить данные |
value | string number object | Да | Данные для сохранения |
immediate | boolean | Нет | Сохранить данные на сервер немедленно. По умолчанию установлено в false. |
Получение данных
window.parent.courseController.data.get({id, selector});
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да, если не передан selector | Ключ по которому лежат данные |
selector | function | Да, если не передан id | Функция селектор, возвращающая нужное значение: (state) => state.some.deep.data |
window.parent.courseController.data.getAll();
Получение данных через подписку на переменную
window.parent.courseController.data.subscribe({id, pageId});
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да | Ключ по которому лежат данные |
pageId | string | Да | Страница для которой происходит подписка на переменную |
После подписки на страницу будет приходить postMessage с event.data.type === "data.update", а в event.data.payload - переменная |
Страницы
Сообщение "Страница загружена"
window.parent.courseController.page.ready({id});
Каждая страница обязательно должна вызывать этот метод когда страница готова для показа пользователю (все ресурсы загружены, необходимые данные получены итп).
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да | id страницы |
Загрузить страницу
window.parent.courseController.page.load({id});
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да | id страницы, которую надо добавить на загрузку |
Открыть страницу
window.parent.courseController.page.open({id, anchor});
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
id | string | Да | id страницы, которая будет открыта |
anchor | string | Нет | Якорная ссылка в формате #anchor |